package cc.bukkitPlugin.banitem.command.analyse;

import java.util.ArrayList;

import org.bukkit.command.CommandSender;

import cc.bukkitPlugin.banitem.BanItem;
import cc.bukkitPlugin.banitem.command.AParamCommand;

public abstract class AParam{

    protected BanItem mPlugin;
    /**临时存放错误消息,线程不同步*/
    protected AnalyseMan mAnalyor;
    /**模块可以处理的标签,用于注册模块的时候使用,子类需要重写*/
    protected String[] mLabels;

    public AParam(BanItem pPlugin,AnalyseMan pAnalyor){
        this.mPlugin=pPlugin;
        this.mAnalyor=pAnalyor;
    }

    /**
     * 获取模块标签
     */
    public String[] getLabels(){
        return this.mLabels;
    }

    /**
     * 处理子参数模块的值
     * <p>
     * {@link AnalyseResult#mBuildError}表示表示在建立时是否出错<br />
     * {@link AnalyseResult#mBuildErrorMsg}存储建立参数出错时的消息
     * </p>
     * @param pCmdParam 参数处理完毕后的存放处
     * @param pArg 模块的值
     * @return 模块值处理结果
     */
    public abstract AnalyseResult handle(CommandSender pSender,AnalyseResult pCmdParam,String pArg);

    /**
     * 根据已有的参数生成该模块可能的值
     * @param pSender 命令发送者
     * @param pCommand 属于哪个命令
     * @param pArgs 命令参数
     */
    public abstract ArrayList<String> tabComplete(CommandSender pSender,AParamCommand pCommand,String[] pArgs);

    public abstract ArrayList<String> getHelp();

}
